﻿Imports System.Runtime.Serialization
Imports System.ComponentModel
Imports MoniMisi2


Partial Class Login
  Inherits System.Web.UI.UserControl
 
  Public Class RegistroUsuario
    Public Sub New(ByVal pPedido As String, ByVal pUsuario As String, ByVal pClave1 As String, ByVal pClave2 As String, ByVal pPerfil As String, ByVal pMail As String)
      Pedido = pPedido
      Usuario = pUsuario
      Perfil = pPerfil
      Mail = pMail
      Clave1 = pClave1
      Clave2 = pClave2
    End Sub
    Public Pedido As String
    Public Usuario As String
    Public Perfil As String
    Public Mail As String
    Public Clave1 As String
    Public Clave2 As String
  End Class
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Genero tabla de Usuarios en memoria a modo demostracion  para no usar tablas fisicas
    Dim Usuarios As New Dictionary(Of String, Login.RegistroUsuario)
    Usuarios.Add("Juan", New Login.RegistroUsuario("", "Juan", "Juan", "", "Admin", "Juan@Juan"))
    Usuarios.Add("Pedro", New Login.RegistroUsuario("", "Pedro", "Pedro", "", "Operador", "Pedro@Pedro"))
    Usuarios.Add("Pablo", New Login.RegistroUsuario("", "Pablo", "Pablo", "", "Invitado", "Pablo@Pablo"))
    HttpContext.Current.Application.Add("UsuariosRegistrados", Usuarios)
  End Sub

  Public Shared Function ManejoLogin(ByVal pContrato As MoniMisi2.ProveedorDatosServidor.Contrato) As MoniMisi2.ProveedorDatosServidor.Contrato
    ''Obtengo los usuarios. en este caso los traigo de memoria, pero pueden obtenerse con el método que se prefiera.
    Dim Usuarios As Dictionary(Of String, RegistroUsuario) = HttpContext.Current.Application("UsuariosRegistrados")
    Dim UsuarioLogueado As RegistroUsuario = CType(HttpContext.Current.Session("Usuario"), RegistroUsuario)
    Dim Contrato As MoniMisi2.ProveedorDatosServidor.Contrato = pContrato
    Dim Registros As New List(Of Object)
    Dim RegistroUsuario As New RegistroUsuario("", "", "", "", "", "")
    Registros.Add(RegistroUsuario)
    If Contrato.Operacion.Nombre = "Actualizar" Then
      Dim Parametros = Contrato.Operacion.Valor("Registros")
      RegistroUsuario.Pedido = Parametros("Pedido")

      If Parametros("Pedido") = "Login" Then
        Dim Usuario As String = Parametros("Usuario")
        Dim Clave As String = Parametros("Clave")
       
        If Usuarios.ContainsKey(Usuario) Then
          If Clave = Usuarios(Usuario).Clave1 Then
            RegistroUsuario.Pedido = "Login"
            RegistroUsuario.Usuario = Usuario
            RegistroUsuario.Perfil = Usuarios(Usuario).Perfil
            RegistroUsuario.Mail = Usuarios(Usuario).Mail
            HttpContext.Current.Session("Usuario") = Usuarios(Usuario)
          Else
            Throw New Exception("Clave erronea")
          End If
        Else
          Throw New Exception("No existe el Usuario")
        End If
      End If

      If Parametros("Pedido") = "Cierre" Then
        HttpContext.Current.Session.Remove("Usuario")
        RegistroUsuario.Pedido = "Cierre"
      End If

      If Parametros("Pedido") = "Registro" Then
        If Parametros("Clave1") = Parametros("Clave2") Then
          '' Guardar el pedido de registro en tabla.
          Dim NuevoUsuario As New RegistroUsuario("", Parametros("Usuario"), Parametros("Clave1"), "", "Invitado", Parametros("Mail"))
          Usuarios.Add(Parametros("Usuario"), NuevoUsuario)
        Else
          Throw New Exception("Palabras claves distintas")
        End If
      End If

      If Parametros("Pedido") = "Configurar" Then
        If Parametros("Clave1") = Parametros("Clave2") Then
          '' Modificar los datos del usuario logueado actualmente
          UsuarioLogueado.Clave1 = Parametros("Clave1")
          UsuarioLogueado.Clave2 = Parametros("Clave2")
          UsuarioLogueado.Mail = Parametros("Mail")
          RegistroUsuario.Pedido = "Configurar"
          RegistroUsuario.Usuario = UsuarioLogueado.Usuario
          RegistroUsuario.Mail = UsuarioLogueado.Mail

        Else
          Throw New Exception("Palabras claves distintas")
        End If
      End If

      If Parametros("Pedido") = "Envio" Then
        Dim Existe = False
        For Each Usuario As KeyValuePair(Of String, RegistroUsuario) In Usuarios
          If Usuario.Value.Mail = Parametros("Mail") Then
            Existe = True
            Exit For
          End If
        Next
        If Existe Then
          ''enviar mail
        Else
          Throw New Exception("Mail Erroneo")
        End If
      End If
    Else
      If Not UsuarioLogueado Is Nothing Then
        RegistroUsuario.Usuario = UsuarioLogueado.Usuario
        RegistroUsuario.Perfil = UsuarioLogueado.Perfil
        RegistroUsuario.Mail = UsuarioLogueado.Mail
      End If
    End If
    Contrato = ProveedorDatosServidor.LeerFilas(Contrato, Registros)
    Return Contrato
  End Function

End Class


